package org.cqust.backend.dto.response.mission.attempt;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.cqust.backend.dto.response.mission.MissionVersionDetailDTO;
import org.cqust.backend.entity.mission.attempt.MissionAttempt;

import java.time.LocalDateTime;
/**
 * 数据传输对象（DTO），用于表示任务尝试的详细信息。
 * 继承自MissionVersionDetailDTO，增加了任务尝试的唯一标识符、开始时间、结束时间和得分。
 */
@EqualsAndHashCode(callSuper = true)
@Data
public class MissionAttemptDTO extends MissionVersionDetailDTO {

    /**
     * 任务尝试的唯一标识符。
     * 这个字段用于标识一个特定的任务尝试。
     */
    @Schema(description = "任务尝试的唯一标识符", requiredMode = Schema.RequiredMode.REQUIRED)
    private Long id;

    /**
     * 任务尝试的开始时间。
     * 这个字段记录任务尝试开始的时间戳。
     */
    @Schema(description = "任务尝试的开始时间", requiredMode = Schema.RequiredMode.REQUIRED)
    private LocalDateTime startTime;

    /**
     * 任务尝试的结束时间。
     * 这个字段记录任务尝试结束的时间戳。
     */
    @Schema(description = "任务尝试的结束时间", requiredMode = Schema.RequiredMode.REQUIRED)
    private LocalDateTime endTime;

    /**
     * 任务尝试的得分。
     * 这个字段表示任务尝试获得的分数。
     */
    @Schema(description = "任务尝试的得分", requiredMode = Schema.RequiredMode.REQUIRED)
    private Float score;

    /**
     * 使用MissionAttempt对象构造MissionAttemptDTO对象。
     *
     * @param missionAttempt 任务尝试对象
     */
    public MissionAttemptDTO(MissionAttempt missionAttempt) {
        super(missionAttempt.getMissionVersion());
        this.id = missionAttempt.getId();
        this.startTime = missionAttempt.getStartTime();
        this.endTime = missionAttempt.getEndTime();
        this.score = missionAttempt.getScore();
    }
}
